package com.uplift.mobile.message.service.impl;

import com.github.pagehelper.PageHelper;
import com.uplift.common.base.ServiceReslut;
import com.uplift.mobile.message.dao.MessageMapper;
import com.uplift.mobile.message.model.MessageModel;
import com.uplift.mobile.message.service.IMessageService;
import com.uplift.mobile.realty.dao.RealtyFileMapper;
import com.uplift.mobile.realty.model.RealtyFileModel;
import com.uplift.mobile.realty.service.IRealtyFileService;
import com.uplift.sec.SecurityContext;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
@Transactional
public class MessageServiceImpl implements IMessageService {

	@Autowired
	private MessageMapper messageMapper;

	@Autowired
	private IRealtyFileService realtyFileService;

	@Override
	public List<Map<String, Object>> queryMessage(MessageModel messageModel) {
		if(StringUtils.isBlank(SecurityContext.getUserId())) {
			return null;
		}
		PageHelper.startPage(messageModel.getPage(), messageModel.getLimit());

		messageModel.setToUserId(SecurityContext.getUserId());
		return this.messageMapper.selectMessage(messageModel);
	}

	@Override
	public ServiceReslut addMessage(MessageModel messageModel) {

//		Map<String, Object> sessionUser = SecurityContext.getSessionUser();
//		if(sessionUser == null) {
//			return ServiceReslut.newServiceReslut(0, "获取登录用户信息失败");
//		}
//
//		messageModel.setFromUserId((String) sessionUser.get("id"));
//		messageModel.setFromUserName((String) sessionUser.get("name"));
		messageModel.setId(UUID.randomUUID().toString().replaceAll("-", ""));
		messageModel.setState("1");
		messageModel.setCreateTime(new Date());
		return ServiceReslut.newServiceReslut(messageMapper.insertMessage(messageModel), "");
	}

	@Override
	public ServiceReslut updateMessage(MessageModel messageModel) {
		messageModel.setUpdateTime(new Date());
		return ServiceReslut.newServiceReslut(messageMapper.updateMessage(messageModel), "");
	}

	@Override
	public ServiceReslut deleteMessage(MessageModel messageModel) {
		messageModel.setState("0");		//删除状态
		messageModel.setUpdateTime(new Date());
		return ServiceReslut.newServiceReslut(messageMapper.updateMessage(messageModel), "");
	}

	@Override
	public ServiceReslut sendMessage(MessageModel messageModel) {
		messageModel.setSendTime(new Date());
		messageModel.setUpdateTime(new Date());
		messageModel.setState("2");			//消息已发送
		return ServiceReslut.newServiceReslut(messageMapper.updateMessage(messageModel), "");
	}

	@Override
	public ServiceReslut rebackMessage(MessageModel messageModel) {
		messageModel.setSendTime(new Date());
		messageModel.setUpdateTime(new Date());
		messageModel.setState("1");			//消息撤回
		return ServiceReslut.newServiceReslut(messageMapper.updateMessage(messageModel), "");
	}

	@Override
	public ServiceReslut affirmMessage(MessageModel messageModel) {
		if(StringUtils.isBlank(messageModel.getId())) {
			return ServiceReslut.newServiceReslut(0, "消息id为空");
		}

		messageModel.setSureTime(new Date());
		messageModel.setIsSure("1");		//已确认
		return ServiceReslut.newServiceReslut(messageMapper.updateMessage(messageModel), "");
	}

	@Override
	public Map<String, Object> getOneMessage(MessageModel messageModel) {

		List<Map<String, Object>> maps = this.messageMapper.selectMessage(messageModel);
		if(maps==null || maps.size()==0) {
			return null;
		}

		Map<String, Object> message = maps.get(0);

		RealtyFileModel realtyFileModel = new RealtyFileModel();

		if(message.get("roomId") == null) {
			return null;
		}
		realtyFileModel.setMessageId(message.get("id").toString());

		message.put("files", realtyFileService.queryRealtyTypeFile(realtyFileModel));

		MessageModel _readMessage = new MessageModel();
		_readMessage.setId(messageModel.getId());
		readMessage(_readMessage);			//设置消息为已读状态
		return message;
	}

	@Override
	public void readMessage(MessageModel messageModel) {

		if(StringUtils.isBlank(messageModel.getId())) {
			return;
		}

		messageModel.setIsRead("1");		//设置为已读状态
		messageModel.setUpdateTime(new Date());

		messageMapper.updateMessage(messageModel);
	}

	@Override
	public ServiceReslut setImportance(String ids, String state) {

		if(StringUtils.isBlank(ids) || StringUtils.isBlank(state)) {
			return  ServiceReslut.newServiceReslut(0, "");
		}

		String[] messageIds = StringUtils.split(ids, ",");

		MessageModel messageModel = null;
		for (String messageId : messageIds) {
			messageModel = new MessageModel();
			messageModel.setId(messageId);
			messageModel.setIsImportance(state);

			this.messageMapper.updateMessage(messageModel);
		}
		return ServiceReslut.newServiceReslut(messageIds.length, "");
	}

	@Override
	public ServiceReslut setLock(String ids, String state) {
		if(StringUtils.isBlank(ids) || StringUtils.isBlank(state)) {
			return  ServiceReslut.newServiceReslut(0, "");
		}

		String[] messageIds = StringUtils.split(ids, ",");

		MessageModel messageModel = null;
		for (String messageId : messageIds) {
			messageModel = new MessageModel();
			messageModel.setId(messageId);
			messageModel.setIsLock(state);

			this.messageMapper.updateMessage(messageModel);
		}
		return ServiceReslut.newServiceReslut(messageIds.length, "");
	}

	@Override
	public ServiceReslut deleteMult(String ids) {
		if(StringUtils.isBlank(ids)) {
			return  ServiceReslut.newServiceReslut(0, "");
		}

		String[] messageIds = StringUtils.split(ids, ",");

		MessageModel messageModel = null;
		for (String messageId : messageIds) {
			messageModel = new MessageModel();
			messageModel.setId(messageId);
			messageModel.setState("0");		//设置删除状态

			this.messageMapper.updateMessage(messageModel);
		}
		return ServiceReslut.newServiceReslut(messageIds.length, "");
	}


}
